import store from '@/store/index.js'
// 引入request
import post from '@/common/request/post.js'

const TOKEN_KEY = 'APPSESSIONID'

export default {
	// 写入 token
	setToken(token, callback, failCall) {
		uni.setStorage({
			key: TOKEN_KEY,
			data: token,
			success: () => {
				if (typeof callback === 'function') {
					this.getToken((res) => {
						callback(res)
					})
				}
			},
			fail(error) {
				if (typeof failCall === 'function') {
					failCall(error)
				}
			}
		});
	},
	removeToken(successCallback, failCall) {
		uni.removeStorage({
			key: TOKEN_KEY,
			success: function(res) {
				if (typeof successCallback === 'function')
					successCallback(res)
			},
			fail: function(error) {
				if (typeof failCall === 'function')
					failCall(error)
			},
		});
	},
	// 获取 token
	getToken(callback) {
		if (typeof callback === 'function') {
			uni.getStorage({
				key: TOKEN_KEY,
				success: function(res) {
					callback(res.data);
				}
			});
		} else {
			try {
				return uni.getStorageSync(TOKEN_KEY)
			} catch (e) {
				// error
			}
		}
	},
	// 登录
	tokeLogin(token, successCallback, failCallback) {
		this.setToken(token, (setoken) => {
			// 存储成功后获取用户的info数据
			this.login(token, successCallback, failCallback)
		}, () => {
			if (typeof failCallback === 'function')
				failCallback(res)
		})
	},
	// 从本地存储中获取 token 登录
	storageLogin(successCallback, failCallback) {
		this.getToken((token) => {
			this.login(token, successCallback, failCallback)
		})
	},
	// 验证登录,如果 vuex 中存在则不进行操作，如果不存在则去查看 storage 中是否存在 token ，存在则静默登录,不存在则什么都不做
	displayLogin(successCallback, failCallback) {
		if (store.state && store.state.user && store.state.user.isLogin) {
			return;
		}
		this.getToken((token) => {
			if (token) {
				this.storageLogin(successCallback, failCallback)
			}
		})
	},
	// 登录操作
	login(setoken, successCallback, failCallback) {
		if (!setoken) {
			console.error('token 为空，无法正常请求后台登录操作！')
		}
		post({
			url: '/user/login',
			data: {
				token: setoken
			},
			success: (rsp) => {
				if (!rsp) {
					return
				}
				// 写入 vuex 中
				if (store) {
					store.dispatch('user.login', rsp)
				} else {
					// 未能获取到 store 写入 user info 数据
					console.error('未能获取到 store 写入 user info 数据');
				}
				if (typeof successCallback === 'function')
					successCallback(rsp)
			}
		})
	},
	// 验证是否登录，如果登录则执行参数方法，如果没登录则跳出弹窗
	vLogin(successCallback, bool) {
		if (store.state && store.state.user && store.state.user.isLogin) {
			if (typeof bool === 'boolean' && bool === false) {
				return;
			} else {
				successCallback(store.state.user)
			}
		} else {
			// 还未登录请先登录
			uni.showModal({
				title: '提示',
				content: '还未登陆，请先登录！',
				success: function(res) {
					if (res.confirm) {
						// 进入登录页面
						uni.navigateTo({
							url: '/pages/public/login'
						});
					} else if (res.cancel) {

					}
				}
			});
		}
	},
	getUserinfo(successCallback, failCallback) {
		if (store.state && store.state.user && store.state.user.isLogin) {
			if (typeof successCallback === 'function')
				successCallback(store.state.user.info)
		} else {
			// 获取 token
			this.storageLogin((info) => {
				if (typeof successCallback === 'function')
					successCallback(info)
			}, (error) => {
				if (typeof failCallback === 'function')
					failCallback(error)
			})
		}
	},
	logout(successCallback) {
		store.dispatch('user.logout', () => {
			this.removeToken(() => {
				if (typeof successCallback === 'function')
					successCallback()
			})
		})
	}
}
